package com.excel.validators.core.decorative;

/**
 * @author wangxiaoliang10
 *
 * 提供验证器及错误消息处理能力
 */
@SuppressWarnings({"unused","rawtypes"})
public abstract class Validator<V> extends Detector<V> {
	
		/**
		 * The empty array singleton instance.
		 */
		private volatile static Object[] EmptyArray = new Object[0];
		
		/**
		 * temporarily saved and composite values
		 */
		private CompositeValue composites;
		
		protected void inspect(V values) {
				// TODO validate excel data line based
				this.validate(values);	
		}
		
		/**
		 * 为单元格设置消息
		 * 该方案有一定的性能损失，但设计结构更合理，毫无过多冗余关联
		 * @param fieldName
		 * @param message
		 */
		protected void setMessage(String fieldName,String message) {
				// TODO 设置消息属性
				for (FieldValue fieldValue : composites) {
						if (equals(fieldName, fieldValue.getFieldName())) {
								fieldValue.setMessage(message);
								break;
						}
				}
		}
		
		/**
		 * 为单元格设置消息
		 * @param fieldIndex
		 * @param message
		 */
		protected void setMessage(int fieldIndex,String message) {
				// TODO 设置消息属性
				FieldValue fieldValue = composites.getField(fieldIndex);
				fieldValue.setMessage(message);
		}
		
		protected void dedicate(CompositeValue composites) {
				this.composites = composites;
		}
		
		/**
		 * 提供不精确的字符串等值比较
		 * @param o1
		 * @param o2
		 * @return
		 */
		protected boolean equals(String o1,String o2) {
				return o1.hashCode() == o2.hashCode();
		}

}
